﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web;
using CDStore3Tiers;
using System.Data.Linq;

namespace CDStore3Tiers
{
    public class XuLyBaiHat
    {
        StoreCDDataContext db;
        XuLyForm XL = new XuLyForm();
        /// <summary>
        /// Khởi tạo hàm xử lý
        /// </summary>
        public XuLyBaiHat()
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
        }
        /// <summary>
        /// lấy ra bảng bài hát
        /// </summary>
        /// <returns></returns>
        public Table<BaiHat> getList()
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
            return db.BaiHats;
        }
        /// <summary>
        /// Cập nhật lại bài hát
        /// </summary>
        /// <param name="dgv">danh sách hiển thị</param>
        public void updateBaiHat(DataGridView dgv)
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
            if (dgv.Rows.Count > 0)
            {
                XuLyForm XL = new XuLyForm();
                dgv.EndEdit();
                foreach (DataGridViewRow r in dgv.Rows)
                {
                    int maBH = int.Parse(r.Cells["cMaBH"].Value.ToString().Trim());
                    string tenBH = r.Cells["cTenBH"].Value.ToString().Trim();
                    string caSi= r.Cells["cCaSi"].Value.ToString().Trim();
                    string nhacSi = XL.CToString(r.Cells["cNhacSi"].Value);
                    int hot = int.Parse(r.Cells["cHot"].Value.ToString().Trim());
                    BaiHat bh = db.BaiHats.Single(t => t.MaBH.Equals(maBH));
                    bh.TenBH = tenBH;
                    bh.CaSi = caSi;
                    bh.NhacSi = nhacSi;
                    bh.Hot = hot;
                    db.SubmitChanges();
                }
            }
        }
        /// <summary>
        /// Lấy mã bài hát cuối cùng (bài hát vừa được thêm
        /// </summary>
        /// <returns>mã bài hát</returns>
        public int GetlastMaBH()
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
            var a = (from t in db.BaiHats
                     orderby t.MaBH descending
                     select t.MaBH).First();
            return a;
        }
        /// <summary>
        /// lấy danh sách đĩa nhạc chứa bài hát
        /// </summary>
        /// <param name="maso">mã bài hát</param>
        /// <returns>danh sách đĩa nhạc</returns>
        public List<vwDSDiaNhac> GetDSDN(int maso)
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
            List<vwDSDiaNhac> get = (from ds in db.vwDSDiaNhacs
                                     where ds.MaBH == maso
                                     select ds).ToList<vwDSDiaNhac>();
            return get;
        }

        /// <summary>
        /// tìm kiếm bài hát
        /// </summary>
        /// <param name="BH">danh sách bài hát</param>
        /// <param name="val">chuỗi tìm kiếm</param>
        /// <returns>danh sách kết quả</returns>
        public List<BaiHat> SearchBH(List<BaiHat> BH, string val)
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
            val = val.ToLower();
            return BH.Where(c => c.MaBH.ToString().ToLower().Contains(val) ||
                c.TenBH.ToString().ToLower().Contains(val) ||
                c.CaSi.ToString().ToLower().Contains(val)).ToList<BaiHat>();
        }
        /// <summary>
        /// tìm kiếm xem bài hát đã tồn tại hay chưa
        /// </summary>
        /// <param name="val">chuỗi nhập vào</param>
        /// <returns>tên bài hát</returns>
        public string TenBH(string val)
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
            string a = "";
            foreach (BaiHat n in db.BaiHats)
            {
                if (n.TenBH.Trim().ToLower() == val.Trim().ToLower())
                {
                    a = n.TenBH;
                }
            }
            return a;
        }

        /// <summary>
        /// lấy tên bài hát từ mã bài hát
        /// </summary>
        /// <param name="mabh">mã bài hát</param>
        /// <returns>tên bài hát</returns>
        public string TenBH(int mabh)
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
            var tenbh = (from a in db.BaiHats
                         where a.MaBH == mabh
                         select a.TenBH).Single();
            return tenbh;
        }
        /// <summary>
        /// kiểm tra xem bài hát với ca sĩ đó đã có trong cơ sở dữ liệu hay chưa
        /// </summary>
        /// <param name="val">tên bài hát</param>
        /// <param name="b">tên ca sĩ</param>
        /// <returns>1/0</returns>
        public int CaSi(string val, string b)
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
            int a = 0;
            foreach (BaiHat n in db.BaiHats)
            {
                if (n.TenBH.Trim().ToLower() == val.Trim().ToLower() && n.CaSi.Trim().ToLower() == b.Trim().ToLower())
                {
                    a = 1;
                }
            }
            return a;
        }
        /// <summary>
        /// Lấy tên ca sĩ từ mã bài hát
        /// </summary>
        /// <param name="mabh">mã bài hát</param>
        /// <returns>tên ca sĩ</returns>
        public string CaSi(int mabh)
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
            var casi = (from a in db.BaiHats
                         where a.MaBH == mabh
                         select a.CaSi).Single();
            return casi;
        }
        /// <summary>
        /// tổng số trang bài hát hiển thị
        /// </summary>
        /// <param name="pagesize">số bài hát trong 1 trang</param>
        /// <returns>số trang</returns>
        public int TongSoTrang(int pagesize)
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
            var a = (from t in db.BaiHats
                     select t).Count();
            if (a % pagesize == 0)
            {
                a = (int)a / pagesize;
            }
            else
            {
                a = ((int)a / pagesize) + 1;
            }
            return a;
        }
        /// <summary>
        /// só6 trang dang hiển thị
        /// </summary>
        /// <param name="pagenumber">tổng số trang</param>
        /// <param name="pagesize">số bài hát trg trang</param>
        /// <returns>số trang</returns>
        public int SoTrangHienTai(int pagenumber, int pagesize)
        {
            int a = pagenumber;
            if (a % pagesize == 0)
            {
                a = (int)a / pagesize;
            }
            else
            {
                a = ((int)a / pagesize) + 1;
            }
            return a + 1;
        }
    }
}
